package co.gov.medellin.ssti.sub.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;

import javax.naming.NamingException;

import co.gov.medellin.ssti.sub.common.ConexionFactory;
import co.gov.medellin.ssti.sub.model.dao.DAOFactory;
import co.gov.medellin.ssti.sub.model.dao.IReporteTotalProgramasDAO;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.vo.AreaVO;
import co.gov.medellin.ssti.sub.model.vo.ReporteTotalProgramasVO;

public class ReporteTotalProgramasService {
	/**
	 * Metodo que se encarga de recuperar el Reporte Total Programas y
	 * Beneficios.
	 * 
	 * @param criteria
	 * @return Collection de ReporteTotalProgramasVO o vacia si no hay registros
	 * @throws SQLException
	 */
	public Collection<ReporteTotalProgramasVO> findReporteTotalProgramas(
			ReporteTotalProgramasVO criteria) throws DAOException {
		IReporteTotalProgramasDAO reporteTotalProgramasDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			reporteTotalProgramasDAO = DAOFactory.getDAOFactory(
					DAOFactory.ORACLE).getReporteTotalProgramasDAO(con);
			return reporteTotalProgramasDAO.findReporteTotalProgramas(criteria);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (reporteTotalProgramasDAO != null) {
				if (!reporteTotalProgramasDAO.isConnClosed()) {
					reporteTotalProgramasDAO.close();
				}
			}
		}
	}

	/**
	 * Metodo que retorna las secretarias (los registros que tengan codigo_area
	 * null en TCS_BEN_AREA)
	 * 
	 * @return
	 * @throws SQLException
	 */
	public Collection<AreaVO> findSecretarias() throws DAOException {
		IReporteTotalProgramasDAO reporteTotalProgramasDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			reporteTotalProgramasDAO = DAOFactory.getDAOFactory(
					DAOFactory.ORACLE).getReporteTotalProgramasDAO(con);
			return reporteTotalProgramasDAO.findSecretarias();
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (reporteTotalProgramasDAO != null) {
				if (!reporteTotalProgramasDAO.isConnClosed()) {
					reporteTotalProgramasDAO.close();
				}
			}
		}
	}

	/**
	 * Metodo para provisional para recuperar los filtros utilizados en el
	 * reporte.
	 * 
	 * @param reporteTotalProgramasVO
	 * @return
	 * @throws SQLException
	 */
	public ReporteTotalProgramasVO findFilters(
			ReporteTotalProgramasVO reporteTotalProgramasVO)
			throws DAOException {
		IReporteTotalProgramasDAO reporteTotalProgramasDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			reporteTotalProgramasDAO = DAOFactory.getDAOFactory(
					DAOFactory.ORACLE).getReporteTotalProgramasDAO(con);
			return reporteTotalProgramasDAO
					.findFilters(reporteTotalProgramasVO);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (reporteTotalProgramasDAO != null) {
				if (!reporteTotalProgramasDAO.isConnClosed()) {
					reporteTotalProgramasDAO.close();
				}
			}
		}
	}
}
